gusucode.com > 先进 PID 控制及其 MATLAB 仿真 (程序) > 先进 PID 控制及其 MATLAB 仿真 (程序)\CHAPTER6\CHAP6_11.m

    %PID Controller for coupling plant
clear all;
close all;

u1_1=0.0;u1_2=0.0;u1_3=0.0;u1_4=0.0;
u2_1=0.0;u2_2=0.0;u2_3=0.0;u2_4=0.0;

y1_1=0;y2_1=0;

x1=[0;0];x2=[0;0];x3=[0;0];

kp=0.020;
ki=0.050;
kd=0.0001;

error_1=[0;0];
ts=1;
for k=1:1:1500
time(k)=k*ts;

%Step Signal
R=[1;0];
%R=[0;1];

%PID Decouple Controller
u1(k)=kp*x1(1)+kd*x2(1)+ki*x3(1);   
u2(k)=kp*x1(2)+kd*x2(2)+ki*x3(2);   
u=[u1(k),u2(k)];

if u1(k)>=10
   u1(k)=10;
end
if u2(k)>=10
   u2(k)=10;
end
if u1(k)<=-10
   u1(k)=-10;
end
if u2(k)<=-10
   u2(k)=-10;
end

%Coupling Plant
yout1(k)=1.0/(1+y1_1)^2*(0.8*y1_1+u1_2+0.2*u2_3);
yout2(k)=1.0/(1+y2_1)^2*(0.9*y2_1+0.3*u1_3+u2_2);

error1(k)=R(1)-yout1(k);
error2(k)=R(2)-yout2(k);
error=[error1(k);error2(k)];

%-----------Return of PID parameters------------%
u1_4=u1_3;u1_3=u1_2;u1_2=u1_1;u1_1=u(1);

u2_4=u2_3;u2_3=u2_2;u2_2=u2_1;u2_1=u(2);

y1_1=yout1(k);y2_1=yout2(k);

x1=error;                %Calculating P
x2=(error-error_1)/ts;   %Calculating D
x3=x3+error*ts;          %Calculating I

error_1=error;
end
hold on;
plot(time,R(1),'b',time,yout1,'r');
plot(time,R(2),'r',time,yout2,'b');
xlabel('time(s)');ylabel('rin,yout');